package com.xpsoft.oa.service.statistics.impl;


import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;

import com.google.gson.reflect.TypeToken;
import com.xpsoft.core.service.impl.BaseServiceImpl;
import com.xpsoft.core.util.JsonUtil;
import com.xpsoft.oa.dao.statistics.StaffTrainApplyDao;
import com.xpsoft.oa.dao.statistics.StaffTrainInfoDao;
import com.xpsoft.oa.model.statistics.StaffTrainApply;
import com.xpsoft.oa.model.statistics.StaffTrainInfo;
import com.xpsoft.oa.service.statistics.StaffTrainApplyService;

public class StaffTrainApplyServiceImpl extends BaseServiceImpl<StaffTrainApply> implements StaffTrainApplyService{
	private StaffTrainApplyDao dao;
	@Autowired
	private StaffTrainInfoDao staffTrainInfoDao;
	public StaffTrainApplyServiceImpl(StaffTrainApplyDao dao) {
		super(dao);
		this.dao=dao;
	}

	@Override
	public void saveStaffTrainApply(StaffTrainApply staffTrainApply,
			String trainDataList) {
		// TODO Auto-generated method stub
		Boolean isNew = true;//新增标志
		if(staffTrainApply.getId()!=null){
			isNew = false;
		}
		dao.save(staffTrainApply);
		if(StringUtils.isNotBlank(trainDataList)){
			List<StaffTrainInfo> staffTrainInfoList = JsonUtil.fromJsonTypesWithDate(trainDataList,
					new TypeToken<List<StaffTrainInfo>>() {
					}.getType());
			if(!isNew){//修改
				List<Long> idList = new ArrayList<Long>();
				for(StaffTrainInfo staffTrainInfo:staffTrainInfoList){
					if(staffTrainInfo.getId()!=null){//修改的记录
						idList.add(staffTrainInfo.getId());
					}
				}
				if(idList.size()>0){//先进行删除
					staffTrainInfoDao.deleteStaffTrainInfos(staffTrainApply.getId(), idList);
				}
			}
			for(StaffTrainInfo staffTrainInfo:staffTrainInfoList){
				staffTrainInfo.setStaffTrainApply(staffTrainApply);
//				if(staffTrainInfo.getId()!=null){
//					StaffTrainInfo oldstaffTrainInfo = staffTrainInfoDao.get(staffTrainInfo.getId());
//					staffTrainInfo.setStatus(oldstaffTrainInfo.getStatus());
//					staffTrainInfoDao.merge(staffTrainInfo);
//				}else{
//					staffTrainInfo.setStatus(0);
//					staffTrainInfoDao.save(staffTrainInfo);
//				}
				staffTrainInfoDao.save(staffTrainInfo);
			}
		}
	}

}